package com.designPattern.clone;

import java.io.Serializable;

/**
 * 下面这个类实现了【深拷贝】
 *
 * 【实现方法】
 * 需要实现Cloneable ，Serializable接口
 * 实现clone方法中，除了要对本对象进行拷贝
 * 还需要对每一个引用对象进行拷贝
 *
 * 【注意事项】
 * 深拷贝是指源对象与拷贝对象互相独立，
 * 其中任何一个对象的改动都【不会】对另外一个对象造成影响。
 */
public class House implements Cloneable, Serializable {
    int name;
    Sheep sheep = new Sheep("绵阳",30);

    public House(int name) {
        this.name = name;
    }


    public String toHashCode() {
        return "sheep.hashcode:" + sheep.hashCode()+" house.hashcode:" + this.hashCode();
    }

    @Override
    public String toString() {
        return "House{" +
                "name=" + name +
                ", sheep=" + sheep +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        //对本类实现拷贝
        House house = (House) super.clone();
        //对引用对象实现拷贝
        house.sheep = (Sheep) house.sheep.clone();
        //返回克隆后的对象
        return house;
    }
}

